<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ManejoBD
 *
 * @author Jose Tejada
 */
class ManejoBD {

    /**
     * LOGIN
     */
    public static function login( $sTablaUsuarios, $sCUsuario, $sVUsuario ) {
        $iActivo     = 1;
        $iHabilitado = 1;
        $resultSet = NULL;
        try {

            $sQuery = "SELECT * FROM " . $sTablaUsuarios;
            $sQuery .= " WHERE $sCUsuario=? AND activo=? AND habilitado = ?;";
            $cn = ConexionBD::getInstance()->getConexion();
            $cmd = $cn->prepare( $sQuery );
            $cmd->bindParam( 1, $sVUsuario, PDO::PARAM_STR, 15 );
            $cmd->bindParam( 2, $iActivo, PDO::PARAM_INT, 1 );
            $cmd->bindParam( 3, $iHabilitado, PDO::PARAM_INT, 1 );
            $cmd->execute();
            $resultSet = $cmd->fetchAll();
        } catch ( Exception $e ) {
            error_log( $e->getMessage(), 3, "errores.log" );
            throw $e;
        }
        return $resultSet;
    }

    /**
     * RETORNA UNO O VARIOS REGISTROS SEGUN SEA NECESARIO
     */
    public static function retornarRegistro( $sTabla, $asCamposRetorno, $sCondicion = "" ) {
        $resultSet = NULL;
        try {
            $sQuery = "SELECT ";
            $sQuery .= self::formarQueryCampos( $asCamposRetorno );
            $sQuery .= " FROM " . $sTabla;
            if ( !empty( $sCondicion ) )
                $sQuery .= " WHERE " . $sCondicion;
            $resultSet = self::ejecutarQuery( $sQuery, true );
        } catch ( Exception $e ) {
            error_log( $e->getMessage(), 3, "errores.log" );
            throw $e;
        }
        return $resultSet;
    }

    /**
     * Recibe el nombre de la tabla y un ARRAY con los datos a ingresar.
     */
    public static function insertarDatos( $sNombreTabla, $asCamposIngreso, $asValoresIngreso ) {
        $blResultado = FALSE;
        try {
            $sQuery = "INSERT INTO " . $sNombreTabla . " ";
            $sQuery .= self::formarQueryCampos( $asCamposIngreso );
            $sQuery .= self::formarQueryValores( $asValoresIngreso );
            $blResultado = self::ejecutarQuery( $sQuery );
        } catch ( Exception $e ) {
            error_log( $e->getMessage(), 3, "errores.log" );
            throw $e;
        }

        return $blResultado;
    }

    public static function actualizarDatos( $sTabla, $asCamposIngreso, $asValoresIngreso, $sCondicion ) {
        $blResultado = FALSE;
        try {
            $sQuery = "UPDATE " . $sTabla . " SET ";
            $sQuery .= self::formarQueryUpdate( array_combine( $asCamposIngreso, $asValoresIngreso ) );
            $sQuery .= " WHERE " . $sCondicion;
            $blResultado = self::ejecutarQuery( $sQuery );
        } catch ( Exception $e ) {
            error_log( $e->getMessage(), 3, "errores.log" );
            throw $e;
        }

        return $blResultado;
    }

    public static function eliminarRegistro( $sTabla, $sCondicionId = "id=0" ) {
        $blResultado = FALSE;
        try {
            $sQuery = "DELETE FROM " . $sTabla . " WHERE " . $sCondicionId;
            $blResultado = self::ejecutarQuery( $sQuery );
        } catch ( Exception $e ) {
            error_log( $e->getMessage(), 3, "errores.log" );
            throw $e;
        }

        return $blResultado;
    }

//actualizarDatos()

    protected static function formarQueryCampos( $asCamposIngreso ) {
        $i = 0;
        $iNumcampos = count( $asCamposIngreso );
        $sCadenaCampos = "";
        if ( $iNumcampos > 1 && strcmp( $asCamposIngreso[ 0 ], "*" ) != 0 ) {
            $sCadenaCampos.="(";
        } //Si es solo un registro se le pone parentesis

        while ( $i < $iNumcampos ) {
            $sCampo = $asCamposIngreso[ $i ];
            if ( $i < $iNumcampos - 1 )
                $sCadenaCampos.= $sCampo . ",";
            else
                $sCadenaCampos.= $sCampo;
            $i++;
        }
        if ( $iNumcampos > 1 && strcmp( $asCamposIngreso[ 0 ], "*" ) != 0 ) {
            $sCadenaCampos.= ") ";
        }//Si es solo un registro se le pone parentesis
        return $sCadenaCampos;
    }

//formarQueryCampos()

    protected static function formarQueryValores( $asValoresIngreso ) {
        $i = 0;
        $sCadenaValores = "";
        $iNumValores = count( $asValoresIngreso );
        $sCadenaValores.= " VALUES('";
        while ( $i < $iNumValores ) {
            $sDato = $asValoresIngreso[ $i ];
            if ( $i < $iNumValores - 1 )
                $sCadenaValores.= utf8_decode( $sDato ) . "','";
            else
                $sCadenaValores.= utf8_decode( $sDato );
            $i++;
        }
        $sCadenaValores.="');";
        return $sCadenaValores;
    }

//formarQueryValores()

    protected static function formarQueryUpdate( $asArrayCombinado ) {
        $sQueryUpd = "";
        $i = 0;
        $n = count( $asArrayCombinado );
        foreach ( $asArrayCombinado as $sCampo => $sValor ) {
            $i++;
            if ( $i < $n )
                $sQueryUpd .= $sCampo . "='" . $sValor . "',";
            else
                $sQueryUpd .= $sCampo . "='" . $sValor . "'";
        }
        return $sQueryUpd;
    }

    private static function ejecutarQuery( $sQuery, $blIsSelect = false ) {
        $result = $blIsSelect ? NULL : FALSE;
        try {
            $cn = ConexionBD::getInstance()->getConexion();
            $cmd = $cn->prepare( $sQuery );
            $result = $cmd->execute();
            if ( $blIsSelect )
                $result = $cmd->fetchAll();
        } catch ( Exception $e ) {
            error_log( $e->getMessage(), 3, "errores.log" );
            throw $e;
        }
        return $result;
    }

    public function __destruct() {
        
    }

}

?>
